/******************************************************************************* 
  Copyright (C), 1988-2020, zeno Tech. Co., Ltd.
  Description:  SYS模块中COMM定义
  Function List:
            
*******************************************************************************/
#ifndef SYS_COMMU_H 
#define SYS_COMMU_H  

#ifdef __cplusplus
extern "C" {
#endif

/*=============================================================================
                                 Includes                                  
==============================================================================*/
#include "Comm.h"


/*=============================================================================
                               Macro Definition
==============================================================================*/

                        
/*=============================================================================
                        Local Structures and Typedef 
==============================================================================*/
 typedef struct
 {
    int commPort;  /* 串口实际端口号 */
 }SYS_commInitParams_t;


/* 串口校验位类型 */
typedef enum 
{
	SYS_COMM_NO_PARITY = 0,	    /* No parity    */
	SYS_COMM_ODD_PARITY,		/* Odd parity   */
	SYS_COMM_EVEN_PARITY,		/* Even parity  */
	SYS_COMM_MARK_PARITY,		/* Mark parity  */
	SYS_COMM_SPACE_PARITY		/* Space parity */
} SYS_commParity_t;

typedef enum
{
	SYS_COMM_STOP_1BIT = 0,
	SYS_COMM_STOP_1BIT5,		///< 1.5 stop bit
	SYS_COMM_STOP_2BIT			//< 2 stop bit
} SYS_commStopBit_t;

/* 串口属性结构，128字节 */
typedef struct
{
	int		baudrate;	    /* 实际的波特率值。*/	
	char	dataBits;	    /* 实际的数据位 取值为5,6,7,8 */
	char	parity;		    /* 奇偶校验选项，取SYS_commParity_t类型的枚举值。*/
	char	stopBits;	    /* 停止位数，取SYS_commStopBit_t类型的枚举值。 */
	char    minBytes;       /* 对应termAttr.c_cc[VMIN] */
	char    timeout;        /* termAttr.c_cc[VTIME] */
	char	reserved1[3];   /* 保留字节 */
	int		reserved[8];    /* 保留字节 */
}SYS_commAttribute_t;


/*=============================================================================
                             extern  Variables                                  
==============================================================================*/


/*=============================================================================
                             Function Definition                                  
==============================================================================*/ 

/*******************************************************************************
  Function:     SYS_UartOpen
  Description:  打开串口设备
  Input:        - pInitPara: 初始化参数
  Output:       无
  Return:       ~NULL: 成功
                NULL: 失败
  Others:       无
*******************************************************************************/
void *SYS_UartOpen(SYS_commInitParams_t *pInitPara);

/*******************************************************************************
  Function:     SYS_UartClose
  Description:  关闭串口设备
  Input:        - hComm: 串口句柄
  Output:       无
  Return:       0: 成功
                <0: 失败
  Others:       无
*******************************************************************************/
int SYS_UartClose(void *hComm);


/*******************************************************************************
  Function:     SYS_UartUnblock
  Description:  强制读写接口返回
  Input:        - hComm: 串口句柄
  Output:       无
  Return:       0: 成功
                <0: 失败
  Others:       无
*******************************************************************************/
int SYS_UartUnblock(void *hComm);


/*******************************************************************************
  Function:     SYS_UartSet
  Description:  设置串口配置
  Input:        - hComm: 串口句柄
                - pAttr: 配置属性结构体指针
  Output:       无
  Return:       0: 成功
                <0: 失败
  Others:       无
*******************************************************************************/
int SYS_UartSet(void *hComm, SYS_commAttribute_t *pAttr);

/*******************************************************************************
  Function:     SYS_UartRead
  Description:  读串口数据
  Input:        - hComm: 串口句柄 
                - pBuf: 数据缓冲的指针。
                - len: 要读出的字节数
  Output:       无
  Return:       >0  读出的字节数
                <=0 读失败
  Others:       无
*******************************************************************************/
int SYS_UartRead(void *hComm, char *pBuf, ulong len);

/*******************************************************************************
  Function:     SYS_UartWrite
  Description:  写串口数据
  Input:        - hComm: 串口句柄 
                - pBuf: 数据缓冲的指针。
                - len: 要写入的字节数
  Output:       无
  Return:       >0  写入的字节数
                <=0 读失败
  Others:       无
*******************************************************************************/
int SYS_UartWrite(void *hComm, char *pBuf, ulong len);

#ifdef __cplusplus
}
#endif
#endif // SYS_COMMU_H 
